/*
 * Copyright 2007,2008 Anton Dignoes, Daniel Rampanelli, Martin Palma
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.googlecode.webduff.store.compound;

import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import com.googlecode.webduff.WebDuffConfiguration;
import com.googlecode.webduff.authentication.provider.Credential;
import com.googlecode.webduff.store.WebdavStore;
import com.googlecode.webduff.store.WebdavStoreFactory;


public class CompoundWebDuffStoreFactory implements WebdavStoreFactory {
	
	@SuppressWarnings("unused")
	private static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(CompoundWebDuffStoreFactory.class);
	
	private Map<String, WebdavStoreFactory> definedFactories;
	
	public void init(WebDuffConfiguration config) {
		definedFactories = new Hashtable<String, WebdavStoreFactory>();
		
		List<?> definedStores = config.getConf().getList("store.class");
		
		for (int i = 0 ; i < definedStores.size() ; i++) {
			WebDuffConfiguration localConf = config.subset("store(" + i + ")");
			WebdavStoreFactory aFactory = localConf.<WebdavStoreFactory>getConfigurableComponent(localConf);
			aFactory.init(localConf);
			String storeName = localConf.getConf().getString("name").trim();
			definedFactories.put(storeName, aFactory);
		}
	}
	
	public WebdavStore create(Credential credential) {
		return new CompoundWebDuffStore(credential, definedFactories);
	}

}